在前片文章中我們已將網頁資料取回,今天要介紹的便是如何解析我們取回來的東西,主要使用的模組為BeautifulSoup,使用Anaconda須先至環境新增這個套件新增方式可以參考Day3,安裝完成後我們就來學習這個套件的使用方式嘍!
Beautiful Soup 是一個 Python 的函式庫模組,可以讓開發者僅須撰寫非常少量的程式碼,就可以快速解析網頁 HTML 碼,從中翠取出使用者有興趣的資料、去蕪存菁,降低網路爬蟲程式的開發門檻、加快程式撰寫速度。
透過Anaconda安裝後他會存放在Anaconda下的套件資料夾裡的bs4資料夾底下,所以引入需加上from
如下範例:
from bs4 import BeautifulSoup
html = """
<html >
<head>
<meta charset="UTF-8">
<title>this is a title</title>
</head>
<body>
<p class="news">123</p>
<p class="contents" id="i1">456</p>
<a href="http://www.baidu.com">advertisements</a>
</body>
</html>
"""
#首先先引入模組並定義一個HTML內容
soup = BeautifulSoup(html, 'html.parser')
print(soup.head)
#輸出:
<head>
<meta charset="utf-8"/>
<title>this is a title</title>
</head>
print(soup.title)
#輸出:
<title>this is a title</title>
若想取得不包含標籤的內容可在後面加上.text
或.string
取得文字
print(soup.title.string)
#輸出:
this is a title
prettify()
print(soup.prettify())
#輸出:
<html>
<head>
<meta charset="utf-8"/>
<title>
this is a title
</title>
</head>
<body>
<p class="news">
123
</p>
<p class="contents" id="i1">
456
</p>
<a href="http://www.baidu.com">
advertisements
</a>
</body>
</html>
find_all()
find_all()
可找出物件中所有的指定的標籤p = soup.find_all('p')
print(p)
#輸出:
[<p class="news">123</p>, <p class="contents" id="i1">456</p>]
輸出後的型態會是像List型態的陣列可透過[]
取得第幾個標籤:
print(p[0])
#輸出:<p class="news">123</p>
取得多種Tag:
tag = soup.find_all(["a", "p"])
print(tag)
#輸出:
[<p class="news">123</p>, <p class="contents" id="i1">456</p>, <a href="http://www.baidu.com">advertisements</a>]
find_all()
預設巡覽所有指定的tag,也可指定尋找幾個:
p = soup.find_all('p', limit=1)
print(p)
#輸出:
[<p class="news">123</p>]
下篇文章會介紹透過更多HTML屬性進行取值的方式,下集待續~~
文章內容如果有錯誤歡迎留言告知,可以幫忙糾正錯誤的觀念,感謝!